/**
 * then方法返回的是一个新的promise对象
 * 如果then方法的第二个参数有设置，promise reject操作在then的第二个参数中被捕获，而不会被catch捕获触发了，
 * catch 可以捕获前边promise和then方法中的所有reject抛出的错误以及代码执行的错误，因此更推荐使用catch捕获
 */

const promise = new Promise(function (resolve, reject) {
  const num = Math.random();

  //   num(); // 产生一个错误

  if (num > 0.5) {
    resolve(`resolve msg: num ${num} 大于 0.5`);
  } else {
    reject(`reject msg: num ${num} 小于 0.5`);
  }
});

promise
  .then(
    function handleResolve(value) {
      console.log(value);
      const num = 2;
      num(); // 产生一个错误
    },
    function handleReject(error) {
      // then 第二个参数只能捕获前一个promise对象的reject抛出的错误
      console.log(error);
    }
  )
  .catch(function (error) {
    console.log(`catch trigger error: ${error}`); // catch 可以捕获前边promise和then方法中的reject抛出的错误以及代码执行的错误
  });
